A computing system may comprise hardware including one or more processors and memory, also known as resources. Additional resources may be included. Some computing systems may be regarded as dynamic systems in which the amount of resources may vary from time to time, for example depending on whether those resources are available or are being used in other computing systems. Processors may comprise central processing unit “CPU” cores as is well-known in the art. A “core” is a single processing unit. A computing system may comprise one or more physical machines, each comprising a certain amount of processing power, in terms of CPU cores, and a certain amount of memory.
A computing system may be configured to provide virtual resources, e.g. resources that are not necessarily precisely defined in terms of hardware, thus providing a virtual computing system, for example comprising multiple virtual machines “VM”, each comprising one or more virtual cores and virtual memory. Such “virtualization” may be achieved through the use of virtualization software operating on physical resources. A “virtual” core may be equivalent to a physical core or it may for example share a physical core with one or more other virtual cores, for example on a time allocation basis. A virtual memory may for example comprise a subset or portion of a physical memory. A virtual machine may effectively emulate a physical machine.
A computing system may comprise one or more servers, e.g. processors combined with storage and other resources, and typically connected to devices serviced by the server via one or more networks, configured to manage access to a centralized resource or service in a network. A server may be a VM and a VM may be a server. A physical machine may implement (e.g., execute, instantiate, or otherwise operate) multiple VMs.
In a computing system, the performance of tasks may be controlled by one or more “agents” as is well known in the art. An agent may consist, wholly or partially, of software operating on or executed by one or more processors and thus a computing system may be configured, for example by suitable programming of processors, to implement, execute, instantiate, or otherwise operate, one or more agents. An agent may control other software or computer algorithms that cause a computing system to perform one or more tasks. Such software or computer algorithms are known in the art as “workers”. Thus for example a “worker” may be an algorithm or program which when implemented in a computing system causes the system to perform a particular task. One agent may control workers of a particular kind, for example calculation workers. Alternatively, one agent may control different kinds of worker. A computer on which agent software is implemented may be a server managing access to a resource such as a calculation resource for example. An agent may be agnostic to the requestor for access to the resources and agnostic to the nature of the work itself. An agent may be associated with a predetermined amount of resources, such as a predetermined number of cores and a predetermined amount of memory. The predetermined amount of memory and number of cores may vary from time to time but may be predetermined prior to allocation of resources for the performance of a task. These cores and memory may be spread across more than one VM and/or more than one physical machine. Agents may operate under the control of a “manager” also consisting wholly or partially of software operating on one or more processors. Thus for example an agent may report to the manager the predetermined number of cores and memory associated with it and their utilization status, for example what proportion are in use and optionally what they are being used for and how long they are required for. This information may be used by the manager to allocated resources to tasks in response to incoming requests for tasks to be performed.
For the purpose of allocating agent resources to a task, agents can be represented as a computing “grid” or table including multiple agents each associated with a predetermined amount of cores and amount of memory, e.g. in gigabyte “GB” blocks or sections.
Some embodiments of the invention may be used in situations where remote servers, e.g. hosted on the internet, rather than local computing systems are used to do any of storing, managing and processing data, otherwise known as cloud computing.
The association or assignation of resources to agents may be performed in various ways as is known in the art. For example, initial core and memory values may be passed to an agent in an initial configuration process. In this way it is possible to associate with or assign to an agent or a set of agents all or part of the resources available on the physical or virtual machine on which the agent resides. For example:
A server A may be a physical machine with 16 GB memory and 8 CPU cores.
An agent A may run on Server A and be configured to register 14 GB and 8 CPU cores.
The Agent A does not then register all the memory of the physical machine, for example with a calculation service, 2 GB may be reserved for use by the machine operating system.
Additionally or Alternatively:
A server B may be a virtual machine with 8 GB memory and 8 CPU cores.
An agent B may run on Server B and be configured to register 6 GB and 4 cores.
There may be other processes running on this virtual machine and so only half the available cores may be registered for use within a calculation grid.
There are several other potential options including but not limited to:
specifying the initial resource values as percentages of the total memory and CPU of the server;
dynamically registering the amount of currently available memory and number of CPU cores, or a percentage thereof, at intervals, for example periodically, such as every N seconds;
using time-based profiles to control resources, e.g. more resources released during the night to handle batch loads;
using thresholds to control resources. e.g. only offer resources when there are more than 4 cores free and 8 GB memory free
using external application programming interfaces “APIs” to create one or more new virtual machines each running a new agent to handle peak loads e.g. using elastic provisioning services on offer within cloud environments.
A challenge for the operation of computing systems is to ensure that resources are used as efficiently as possible. Computing systems may be required to operate in a dynamic manner for example in order to be able to accommodate varying work-loads. For example, a computing system may receive requests to perform tasks such as calculations involving large amounts of data. A task may be finite such that computing resources may be freed for other uses once a task has been completed. A request need not specify which resources are to perform the task. It may simply specify the amount of resources required.
In a virtual or physical machine, memory capacity may be unusable if there is no available core to drive it and a core may be unusable if no memory is available.